home *** CD-ROM | disk | FTP | other *** search
- {###############################################################################}
- {# #}
- {# File: Arrays.Pas #}
- {# Author: Darryl Lovato. #}
- {# Description: #}
- {# #}
- {# This module provides a set of routines to create & use large arrays #}
- {# #}
- {###############################################################################}
-
- unit Arrays;
-
- interface
-
- uses MacIntf;
-
- function CreateNewArray(elemSize, upperBound : Longint) : Handle;
- procedure DisposeArray(ary : Handle);
- procedure SetElement(ary : Handle; elemNum : Longint; elemPtr : Ptr);
- function GetElement(ary : Handle; elemNum : Longint) : Ptr;
-
- implementation
-
- type
- ArrayHdl = ^ArrayPtr;
- ArrayPtr = ^ArrayRec;
- ArrayRec = record
- hiBound : integer;
- cellSize : Longint;
- dataStuff : integer;
- end;
-
- {###############################################################################}
- {# #}
- {#function CreateNewArray(elemSize, lowerBound, upperBound : Longint) : Handle;#}
- {# #}
- {###############################################################################}
-
- function CreateNewArray(elemSize, upperBound : Longint) : Handle;
- var
- tempHdl : ArrayHdl;
- begin
- tempHdl := ArrayHdl(NewHandle(Ord4(SizeOf(ArrayRec)) - 2
- + ((upperbound + 1) * elemSize)));
- with tempHdl^^ do
- begin
- hiBound := upperBound;
- cellSize := elemSize;
- end;
- CreateNewArray := Handle(tempHdl);
- end;
-
- {###############################################################################}
- {# #}
- {# procedure DisposeArray(ary : Handle); #}
- {# #}
- {###############################################################################}
-
- procedure DisposeArray(ary : Handle);
- begin
- DisposHandle(ary);
- end;
-
- {###############################################################################}
- {# #}
- {# procedure SetElement(ary : Handle; elemNum : Longint; elemPtr : Ptr); #}
- {# #}
- {###############################################################################}
-
- procedure SetElement(ary : Handle; elemNum : Longint; elemPtr : Ptr);
- type
- fakeary = packed array[1..10000] of signedbyte;
- fakeptr = ^fakeary;
- var
- cellAddr : fakePtr;
- i : integer;
- begin
- with ArrayHdl(ary)^^ do
- if (elemNum > 0) and (elemNum < hibound) then
- begin
- cellAddr := fakePtr(Ord4(@dataStuff) + (elemNum * cellSize));
- for i := 0 to cellSize - 1 do
- cellAddr^[i] := fakePtr(elemPtr)^[i];
- end;
- end;
-
- {###############################################################################}
- {# #}
- {# procedure GetElement(ary : Handle; elemNum : Longint) : Ptr; #}
- {# #}
- {###############################################################################}
-
- function GetElement(ary : Handle; elemNum : Longint) : Ptr;
- begin
- with ArrayHdl(ary)^^ do
- if (elemNum > 0) and (elemNum < hibound) then
- GetElement := Pointer(Ord4(@dataStuff) + (elemNum * cellSize));
- end;
- end.